package cc.autoapi.pucong.auto.flow.core.flow.execNode.eventBus;

import cn.hutool.core.lang.Assert;

/**
 * 发布者接口
 *
 * @author zeng wenbin
 * @date Created in 2019/8/12
 */
public interface IPublisher<T extends PublishMsg> {

    /**
     * 获取消息类型
     *		需要子类实现
     *
     * @return 获取消息类型
     */
    String getMessageType();

    /**
     * 	生产消息 （同步处理）
     * 		默认实现
     *
     * @param message	消息实体
     */
    default void publishMessage(T message){
        Assert.notNull(message, "消息发送失败!消息实体为null.");
        SubscribePublish.getSubscribePublish().publishMessage(getMessageType(), message);
    }

    /**
     * 生产消息 （异步处理）
     * 		默认实现
     *
     * @param message 消息实体
     */
    default void publicMessageByAsync(T message){
        Assert.notNull(message, "消息发送失败!消息实体为null.");
        SubscribePublish.getSubscribePublish().publicMessageByAsync(getMessageType(), message);
    }
}

